IF exists(SELECT * FROM dbo.sysobjects WHERE name='fr_maakXML' AND xtype='P') 
BEGIN
	DROP PROCEDURE fr_maakXML
END
GO

CREATE       procedure fr_maakXML(@inschrijvingsNr char(7),
@aard char(1),@periode char(2),@jaar char(4),@test bit)
as
set nocount on

if (dbo.fr_rekenenMoet(@aard,@periode,@jaar,@inschrijvingsNr)=0) return

--print '   X:begin procedure: ' + convert(varchar(50),getdate(),109)
declare @groepsnaam varchar(20)
declare @XMLNaam varchar(40)
declare @voorstelNummer int

if (@test=1)
begin
  set @groepsnaam = @inschrijvingsNr
end
else
begin
  select @groepsnaam = groepsnaam from fr_rapportGroepen 
  where inschrijvingsNr=@inschrijvingsNr
	and aard = @aard 
	  and periode=@periode
end		

-------------------------------------------------------
-- De tabel fr_tussen zal gevuld worden met stukjes XML 
-- door de procedures fr_XML...
-- Later zullen deze stukjes aan mekaar gevoegd worden tot n document.
-- Het hoofdNr en de tussenNr, dienen als structurerend element.
-------------------------------------------------------

declare @versie float
set @versie = rand()
delete from fr_tussen where versie = @versie

--print '   na hulptabel: ' + convert(varchar(50),getdate(),109)
-- Gegevens vooraf
insert into fr_tussen(versie,hoofdNr,tussenNr,volgNr,tekst)
values(@versie,-2,'','','<?xml version=''1.0'' encoding=''ISO-8859-1''?>')

insert into fr_tussen(versie,hoofdNr,tussenNr,volgNr,tekst)
values(@versie,-1,'','', '<rapport iNr="' + @inschrijvingsNr + 
			'" aard="' + @aard + 
			'" periode="' + @periode + 
			'" jaar="' + @jaar + '">')

-- Het hart van de procedure: aanroep van de sub-procedures

--print '   X:begin aanwezige procedures: ' + convert(varchar(50),getdate(),109)
select @voorstelNummer =voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'leerling'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLleerling @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null

select @voorstelNummer=voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'gevraagdeVakCijfersCommentaar'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLgevraagdeVakCijfersCommentaar @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null

select @voorstelNummer=voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'alleVakken'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLalleVakken @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null

select @voorstelNummer=voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'aanwezigeMaandcommentaar'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLaanwezigeMaandCommentaar @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null

select @voorstelNummer =voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'totalen'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLTotalen @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null

select @voorstelNummer =voorstelNr
from fr_XMLcompositie 
	where aard=@aard
	  and periode=@periode 
	    and groepsnaam = @groepsnaam
	      and xmlNaam = 'beslissing'
if isnull(@voorstelNummer,-1) > 0 execute fr_XMLBeslissing @versie,@aard,@periode,@inschrijvingsNr,@groepsnaam,@voorstelNummer,@test
set @voorstelnummer = null
-- Afsluiting

insert into fr_tussen(versie,hoofdNr,tussenNr,volgNr,tekst)
values(@versie,9999999,'','','</rapport>')

--print '   X:einde aanwezige procedures: ' + convert(varchar(50),getdate(),109)
---------------------------------------------------------------------------- 
--			Tekstopbouw
---------------------------------------------------------------------------- 
-- Er wordt een record/veld geprepareerd in fr_XML
if(@test=1)
begin
  select * from fr_tussen 
	where versie = @versie
	order by hoofdNr,tussenNr,volgNr
end
else
begin
  delete from fr_XML
    where aard = @aard 
	and periode = @periode 
	  and inschrijvingsNr = @inschrijvingsNr
	    and jaar = @jaar

-- De record die de XML-gegevens zal bevatten 

  insert into fr_XML(inschrijvingsNr,aard,periode,groepsnaam,jaar,XMLTekst,laatstGewijzigd)
  values (@inschrijvingsNr,@aard,@periode,@groepsnaam,@jaar,'',getDate())

--print '   X:beginsamenstelling: ' + convert(varchar(50),getdate(),109)

-- Een pointer naar de XML-tekst:

  declare @@ptrval varbinary(16)
  select @@ptrval = textptr(XMLTekst) from fr_XML
	where inschrijvingsNr=@inschrijvingsNr and 
	periode = @periode and
	aard = @aard and 
	jaar = @jaar


  declare @tekst varchar(8000)
  set @tekst = ''

-- De tekst wordt ingevoegd
--print '   X:invoegen tekst: ' + convert(varchar(50),getdate(),109)
  declare deCursor cursor local for
	select tekst
	from fr_tussen
	where versie = @versie
	order by hoofdNr,tussenNr,volgNr
  for read only

  open deCursor
  fetch next from deCursor into @tekst
  set @tekst = @tekst  + char(13) + char(10)
  while (@@fetch_status=0)
	begin
	  updatetext fr_XML.XMLtekst @@ptrval null 0 @tekst
	  set @tekst = ''
	  fetch next from deCursor into @tekst
	end
  close deCursor
  deallocate deCursor
  delete from fr_tussen where versie = @versie
--print '   X:eind procedure: ' + convert(varchar(50),getdate(),109)
end